[Day14] 大家認識這位嗎?革命軍「東軍」軍隊長-貝洛貝蒂,她的鼓舞果實能力可以讓周遭的人全都變成有戰鬥力的單位,簡直就是類別方法啊!
在看完昨天有趣的模組後,今天想要重新回到類別(Class)這個大主題,來跟大家介紹類別方法和實體方法的差異。
那就開始吧!
顧名思義,實體方法(instance method)就是作用在實體上的方法。基本上,類別裡面一般都會是實體方法,但我這邊還是重新快速帶一下觀念。
舉個例子,像是知名的電商網站叫 Shopee,在這個網站註冊的會員,都可以使用 Shopee 提供的服務:購買商品、上架販售等等。
我們來看看程式會怎麼寫上面這段話:
class Shopee
def buyer
puts "成為買家,在雙11掃光所有的貨!"
end
def seller
puts "成為賣家,所有的錢都進來我的口袋!"
end
end
me = Shopee.new
me.buyer
me.seller
# 印出
成為買家,在雙11掃光所有的貨!"
成為賣家,所有的錢都進來我的口袋!
要定義類別方法有好幾種方式,我最常用的是在方法名稱的前加上 self.
class Army
def fight # 實體方法
puts "我要打倒天龍人!"
end
def self.inspire # 類別方法
puts "全部的人都起身戰鬥!"
end
end
soldier = Army.new
soldier.fight
Army.inspire
# 印出
我要打倒天龍人!
全部的人都起來戰鬥!
如果要定義很多類別方法,也可以這樣寫:
class Army
class << self # 這行以下寫的方法就是類別方法,前面不用再加 self
def all
# ...
end # 一直到這
end
end
通常我們要直接請類別幫忙時,就會使用類別方法。換句話說,當我們確定這個方法和特定實體不會有關係,而是要在整個類別操作,就會考慮使用類別方法。
最後,來向大家介紹一個特別的方法「初始化(initialize)」這又是什麼?很像是重灌電腦時才會聽到的單字,是不是覺得有點危險呢?
其實在 Ruby 的類別裡, initialize
指的是:在類別產生實體當下就會立刻執行的方法,也可以想成是寶寶一出生就會做的第一件事(?)
class Baby
def initialize
puts "Hello World(crying!!!)"
end
end
baby = Baby.new
Hello World(crying!!!)
Wow!寶寶一出生就會 Hello World了!看來絕對是當工程師的料啊!
(喂!寶寶在哭了!!!)
今天就先到這邊了!希望大家都有看懂類別方法在做什麼,也希望五倍的大家可以順利完賽!(信心喊話)